package com.baofu.paycore.manager.model;

import com.baofu.paycore.common.exception.PayCoreBizException;
import com.baofu.paycore.service.facade.enums.PayCoreErrorCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * 支付模型
 *
 * User: LZQ Date: 2016/04/20  Version: 1.0
 */
@Getter
@Setter
@Slf4j
@ToString(callSuper = true)
public class PayBO extends PayBaseBO {

    /**
     * 事件号
     */
    private String eventNo;

    /**
     * 付款方客户号
     */
    private String payerNo;

    /**
     * 收款方客户号
     */
    private String payeeNo;

    /**
     * 付款方账户号
     */
    private String payerAccNo;

    /**
     * 原资金主单已退款金额
     */
    private long refundAmt;
    
    /**
     * 退款交易金额（即，资金单每次退款交易时，需退款的金额）
     */
    private Long refundTradeAmt;

    /**
     * 资金单
     */
    private List<SubPayBO> subPayList;

    /**
     * 外部跳转URL
     */
    private String outPayUrl;

    /**
     * 回调通知地址
     */
    private String returnUrl;

    /**
     * 银行响应参数
     */
    private Map<String,String> params;

    /**
     * 是否为实际结果
     * ACCEPT REAL
     */
    private boolean realFlag;

    /**
     * 处理时间
     */
    private Date respDate;

    /**
     * 扩展信息
     */
    private Map<String,String> paymentExt;

    /**
     * 日志跟踪号
     */
    private String tradeLogId;

    /**
     * 备注
     */
    private String remark;

    /**
     * 短信验证码
     */
    private String smsCode;

    /**
     * 模型检查
     */
    @Override
    public void consistencyCheck() {
    }

    /**
     * 状态检查
     */
    @Override
    public void checkStatus() {

    }

    /**
     * 根据资金明细ID从资金明细列表中获取对应的资金明细
     *
     * @param list         资金明细列表
     * @param fundDetailNo 资金明细NO
     * @return             资金明细
     */
    public SubPayBO getFundDetail(List<SubPayBO> list, String fundDetailNo) {

        if (!CollectionUtils.isEmpty(list)) {
            for (SubPayBO each : list) {

                if (StringUtils.equals(fundDetailNo, each.getFundDetailNo())) {
                    return each;
                }
            }
        }
        log.error("资金单不存在:{}", fundDetailNo);
        throw new PayCoreBizException(PayCoreErrorCode.VALUE_NOT_SUPPORT);
    }
}
